home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / libs / sphigs / sph_mac.hqx / SRGP port to 5.0 (compressed) / SRGP_SPHIGS Root / MacSRGP / srgp_font.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-13  |  3.6 KB  |  151 lines

  1. #include "HEADERS.h"
  2. #include "srgplocal.h"
  3.  
  4. #include "srgp_font.proto.h"
  5.  
  6. void
  7. SRGP__initFont (void)
  8. {
  9.    register i;
  10.    
  11. #ifdef X11
  12.    srgp__fontTable[0] = XLoadQueryFont (srgpx__display, SRGP_DEFAULT_FONT_0);
  13.    if (srgp__fontTable[0] == (XFontStruct*)NULL) {
  14.       fprintf (stderr, "System administration problem!\n\
  15.     X could not find font named %s\n\
  16.     System administrator should edit srgplocal.h and change the\n\
  17.     definition of SRGP_DEFAULT_FONT_0.\n",
  18.     SRGP_DEFAULT_FONT_0);
  19.       exit(1);
  20.    }
  21.    for (i=1; i <= MAX_FONT_INDEX; i++)
  22.       srgp__fontTable[i] = (XFontStruct*)NULL;
  23. #endif
  24.  
  25. #ifdef THINK_C
  26.    srgp__fontTable[0].txFont = 0;
  27.    srgp__fontTable[0].txFace = 0;
  28.    srgp__fontTable[0].txSize = 12;  
  29.    for (i=1; i <= MAX_FONT_INDEX; i++)
  30.       srgp__fontTable[i].txFont = -1;
  31. #endif
  32. }
  33.  
  34.  
  35. void
  36. SRGP_loadFont (int font_index, char *name)
  37. {
  38.    DEBUG_AIDS{
  39.       srgp_check_system_state();
  40.       SRGP_trace (SRGP_logStream, "SRGP_loadFont %d '%s'\n", font_index, name);
  41.       srgp_check_font_index(font_index);
  42.       LeaveIfNonFatalErr();
  43.    }
  44.  
  45.    /***** SOME DAY WE SHOULD CALL XUnloadFont TO CLEAN UP *****/
  46.  
  47. #ifdef X11
  48.    if ( !
  49.        (srgp__fontTable[font_index] =
  50.      XLoadQueryFont (srgpx__display, name))) {
  51.       SRGP__error (ERR_BAD_FONT_FILENAME, name);
  52.       return;
  53.    }
  54. #endif
  55. #ifdef THINK_C
  56.    {
  57.       char *family=malloc((size_t)(strlen(name)+1));
  58.       char *size, *style;
  59.       int fnum, sizenum=-1, stylenum=0;
  60.       
  61.       strcpy (family, name);
  62.       size = strchr(family, '.') + 1;
  63.       if (size==(char*)1) {
  64.          SRGP__error (ERR_BAD_FONT_FILENAME, name);
  65.          return;
  66.       }
  67.       *(size-1) = '\0';
  68.       CtoPstr(family);
  69.       GetFNum (family, &fnum);
  70.       if (fnum==0) {
  71.          SRGP__error (ERR_BAD_FONT_FILENAME, name);
  72.          return;
  73.       }
  74.       style = strchr(size, '.') + 1;
  75.       if (style != (char*)1) {
  76.          *(style-1) = '\0';
  77.          while (*style) {
  78.             switch (*style) {
  79.                case 'b': stylenum|=bold; break;
  80.                case 'i': stylenum|=italic; break;
  81.                case 'u': stylenum|=underline; break;
  82.                case 'o': stylenum|=outline; break;
  83.                case 's': stylenum|=shadow; break;
  84.                case 'c': stylenum|=condense; break;
  85.                case 'e': stylenum|=extend; break;
  86.             }
  87.             style++;
  88.          }
  89.       }
  90.       sscanf (size, "%d", &sizenum);
  91.       if (sizenum<1) {
  92.          SRGP__error (ERR_BAD_FONT_FILENAME, name);
  93.          return;
  94.       }
  95.       free (family);
  96.       srgp__fontTable[font_index].txFont = fnum;
  97.       srgp__fontTable[font_index].txSize = sizenum;
  98.       srgp__fontTable[font_index].txFace = stylenum;
  99.    }
  100. #endif
  101.       
  102.    if (font_index == srgp__curActiveCanvasSpec.attributes.font)
  103. #ifdef X11
  104.       XSetFont
  105.      (srgpx__display,
  106.       srgp__curActiveCanvasSpec.gc_frame,
  107.       srgp__fontTable[font_index]->fid);
  108. #endif
  109. #ifdef THINK_C
  110.       TextFont(srgp__fontTable[font_index].txFont);
  111.       TextSize(srgp__fontTable[font_index].txSize);
  112.       TextFace(srgp__fontTable[font_index].txFace);
  113. #endif
  114.       
  115. }
  116.  
  117.  
  118.  
  119.  
  120.  
  121. void
  122. SRGP_inquireTextExtent (char *str, int *width, int *height, int *descent)
  123. {
  124. #ifdef X11
  125.    register XFontStruct *fontstruct;
  126.    register char *cp;  /* traverses through the string */
  127.    XCharStruct overall;
  128.    int dir, asc, desc;
  129.    
  130.    fontstruct = srgp__fontTable[srgp__curActiveCanvasSpec.attributes.font];
  131.    XTextExtents (fontstruct, str, strlen(str), &dir, &asc, &desc, &overall);
  132.    *height = asc;
  133.    *descent = desc;
  134.    *width = overall.width;
  135. #endif
  136.  
  137. #ifdef THINK_C
  138.    FontInfo theinfo;
  139.  
  140.    GetFontInfo (&theinfo);
  141.    *height = theinfo.ascent;
  142.    *descent = theinfo.descent;
  143.    CtoPstr(str);
  144.    *width = StringWidth(str);
  145.    PtoCstr(str);
  146. #endif
  147.  
  148. }
  149.  
  150.  
  151.